package cn.jly.mybatis.mapper;

import cn.jly.mybatis.bean.Employee;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author lanyangji
 * @description employeeMapper
 * @date 2020/11/16 下午 12:26
 */
public interface EmployeeMapper {
    List<Employee> selectList();

    Employee selectByIdAndLastName(@Param("id") Long id, @Param("lastName") String lastName);

    int insert(@Param("emp") Employee employee);

    boolean updateById(Employee employee);

    boolean deleteById(Long id);

    /**
     * 测试sql注入 ${}（拼接sql）和#{}(预编译)
     * 原生sql不支持占位符的地方使用${}，比如分库分表场景下的表名
     *
     * @param lastName
     * @return
     */
    List<Employee> testSqlInject(@Param("lastName") String lastName);

    List<Employee> test$query(@Param("tableName") String tableName,
                              @Param("lastName") String lastName);

    /**
     * 查询单条记录封装为一个map，key为列名，value为列值
     *
     * @param id
     * @return
     */
    Map<String, Object> selectById(Long id);

    /**
     * 1. 查询多条记录封装为map，map的key是主键，value是bean
     * 2. 查询多条记录封装为map，map的key是lastName，value是bean
     *
     * @MapKey("id") 告诉myBatis封装map的时候使用哪个属性作为map的key
     * @param lastName
     * @return
     */
    //@MapKey("id")
    @MapKey("lastName")
    Map<Long, Employee> selectEmpsByLastNameLike(String lastName);
}
